package data;

//import data.GeneralDefinitions.ClusteringPriorityParameters;
import data.GeneralDefinitions.ClusteringPriorityParameters;
import data.GeneralDefinitions.OrderingParameters;
import java.util.Calendar;


public interface Data {

	//disk sizes are in kB
	public static double SSDDiskSize=  150000000.0; 
	public static double SCSIDiskSize= 300000000.0;
	public static double SATADiskSize=1000000000.0;

	//public static int MAXTIMEUNIT=5;

	//throughput numbers are in kB/sec
	public static double SSDTHROUGHPUT=140000.0;
	public static double SCSITHROUGHPUT=60000.0;
	public static double SATATHROUGHPUT=50000.0;

	//latency numbers are in sec
	public static double SSDLATENCY=0.0001;
	public static double SCSILATENCY=0.005;
	public static double SATALATENCY=0.010;

	//prices are in $
	//public static double SATAPRICE=500.0;
	public static double SATAPRICE=300.0;
	public static double SCSIPRICE=300.0;
	//public static double SSDPRICE=5000.0;
	public static double SSDPRICE=2500.0;

	//power consumption numbers are in watt
	public static double SATAPOWER=18.0;
	public static double SCSIPOWER=12.0;
	public static double SSDPOWER=6.0;

	public static int DEFAULT_CLUSTER_TYPE = 0;

	/***********************************************************/
	/**
	 *
	 * @param LUNid
	 * @param clusterType // ignoring this parameter
	 * @param calendar2
	 * @param calendar
	 * @return a list of time units ids that belong to LUNid
	 */
	public double[] getLUNVector(int LUNid, ClusteringPriorityParameters clusterType, Calendar calendar, Calendar calendar2);
	public long getTotalBytesWritten(int TimeUnitID);
	/**
	 * all luns with less than threshold reads are considered unactive
	 * @param threshold
	 * @return an array of unactive luns
	 */
	public int[] getUnactiveLUNs(int threshold);
	public int[] getOrderedLUNVector(OrderingParameters orderingParameter);
	//public int[] getLUNs(); unused

	/**
	 * what does it mean?
	 * @return
	 */
	public int[] getLUNs();
	public LUN getLUN(int LUNid);
	public TimeUnit getTimeUnit(int TimeUnitID);
	public LUNPerTimeUnit getLUNPerTimeUnit(int TimeUnitID, int LUNid);
	public LUNPerTimeUnit[] getAllLunPerTimeUnits(int timeUnitId, int start, int end, OrderingParameters orderingParameter);
	public void parse(String filename);
	public double getTotalSize();
	/**
	 *
	 * @return number of all time units in the DB
	 */
	public int getNumOfTimeUnits();

	/**
	 *	adding LUNs/TimeUnits/LunPerTimeUnits
	 */
	public void addLun(int lun_id, int size);
	public void addLunPerTimeUnit(int lun_id, int timeunit_id, double kbWritten, double kbRead, double numOfReads, double numOfWrites);
//	public void addTimeUnit(int timeUnit_id, Calendar startTime, Calendar endTime);
	public void addTimeUnit(int timeUnit_id, int size);
	public void addTimeUnit(int timeUnit_id, int size, Calendar d);
	public void endTransactions();
	
	public String getFIleName();
}

